#ifndef __LCD_DRIVER_H_
#define __LCD_DRIVER_H_

#include "lcd_spi.h"
#include "lvgl.h"

#define USE_HORIZONTAL 0 // 定义液晶屏顺时针旋转方向 	0-0度旋转，1-90度旋转，2-180度旋转，3-270度旋转
#define LCD_X_OFFSET  0 // 280*240 偏移20 
#define LCD_Y_OFFSET  0 // 280*240 偏移20 

// 定义LCD的尺寸
#define LCD_W 240
#define LCD_H 240

// LCD重要参数集
typedef struct
{
	uint16_t width;	  // LCD 宽度
	uint16_t height;  // LCD 高度
	uint16_t id;	  // LCD ID
	uint8_t dir;	  // 横屏还是竖屏控制：0，竖屏；1，横屏。
	uint16_t wramcmd; // 开始写gram指令
	uint16_t setxcmd; // 设置x坐标指令
	uint16_t setycmd; // 设置y坐标指令
	uint8_t xoffset;
	uint8_t yoffset;
} _lcd_dev;
// LCD参数
extern _lcd_dev lcddev;		 // 管理LCD重要参数
extern uint16_t POINT_COLOR; // 画笔颜色
extern uint16_t BACK_COLOR;	 // 背景颜色
// LCD引脚定义

#define LCD_RES_GPIO 	GPIO_PIN_7
#define LCD_DC_GPIO 	GPIO_PIN_6
#define LCD_CS_GPIO 	GPIO_PIN_5
#define LCD_BLK_GPIO 	GPIO_PIN_4

#define LCD_RES_CLR HAL_GPIO_WritePin(GPIOB, LCD_RES_GPIO, GPIO_PIN_RESET)
#define LCD_RES_SET HAL_GPIO_WritePin(GPIOB, LCD_RES_GPIO, GPIO_PIN_SET)

#define LCD_DC_CLR HAL_GPIO_WritePin(GPIOB, LCD_DC_GPIO, GPIO_PIN_RESET)
#define LCD_DC_SET HAL_GPIO_WritePin(GPIOB, LCD_DC_GPIO, GPIO_PIN_SET)

#define LCD_CS_CLR HAL_GPIO_WritePin(GPIOB, LCD_CS_GPIO, GPIO_PIN_RESET)
#define LCD_CS_SET HAL_GPIO_WritePin(GPIOB, LCD_CS_GPIO, GPIO_PIN_SET)

#define LCD_BLK_CLR HAL_GPIO_WritePin(GPIOB, LCD_BLK_GPIO, GPIO_PIN_RESET)
#define LCD_BLK_SET HAL_GPIO_WritePin(GPIOB, LCD_BLK_GPIO, GPIO_PIN_SET)

// 画笔颜色
#define WHITE 	0xFFFF
#define BLACK 	0x0000
#define BLUE 	0x001F
#define BRED 	0XF81F
#define GRED 	0XFFE0
#define GBLUE 	0X07FF
#define RED 	0xF800
#define MAGENTA 0xF81F
#define GREEN 	0x07E0
#define CYAN 	0x7FFF
#define YELLOW 	0xFFE0
#define BROWN 	0XBC40 // 棕色
#define BRRED 	0XFC07 // 棕红色
#define GRAY 	0X8430	 // 灰色
#define GRAY0 	0xEF7D
#define GRAY1 	0x8410 // 灰色1      00000 000000 00000
#define GRAY2 	0x4208
// GUI颜色

#define DARKBLUE 	0X01CF	 // 深蓝色
#define LIGHTBLUE 	0X7D7C // 浅蓝色
#define GRAYBLUE 	0X5458	 // 灰蓝色
// 以上三色为PANEL的颜色

#define LIGHTGREEN 	0X841F // 浅绿色
#define LIGHTGRAY 	0XEF5B  // 浅灰色(PANNEL)
#define LGRAY 		0XC618	  // 浅灰色(PANNEL),窗体背景色

#define LGRAYBLUE 	0XA651 // 浅灰蓝色(中间层颜色)
#define LBBLUE 		0X2B12	 // 浅棕蓝色(选择条目的反色)



void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue);
void LCD_WriteRAM_Prepare(void);
void Lcd_WriteData_16Bit(uint16_t Data);
void LCD_DrawPoint(uint16_t x, uint16_t y);
void LCD_Clear(uint16_t Color);
void LCD_Init(void);
void LCD_SetWindows(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd);
void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos);
void LCD_direction(uint8_t direction);
void GUI_DrawPoint(uint16_t x, uint16_t y, uint16_t color);
void LCD_Fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint16_t color);
void Gui_Drawbmp16(uint16_t x, uint16_t y, uint16_t length, uint16_t width, const uint8_t *p);
void LCD_Color_Fill_2(uint16_t sx,uint16_t sy,uint16_t ex,uint16_t ey,uint16_t *color);
void LCD_Color_Fill_1(uint16_t sx,uint16_t sy,uint16_t ex,uint16_t ey,lv_color_t *color);
void LCD_Color_Fill_DMA(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t *color_p);

#endif
